{ "cells": [ { "cell_type": "markdown", "id": "943e2fe6", "metadata": {}, "source": [ "# Fuel Mix Over Time " ] }, { "cell_type": "code", "execution_count": 1, "id": "e2de4ef1", "metadata": {}, "outputs": [], "source": [ "import gridstatus\n", "import pandas as pd\n", "import plotly.express as px" ] }, { "cell_type": "code", "execution_count": 2, "id": "96853f00", "metadata": {}, "outputs": [], "source": [ "iso = gridstatus.NYISO()" ] }, { "cell_type": "markdown", "id": "e253e8cd", "metadata": {}, "source": [ "## Get Fuel MIx Data" ] }, { "cell_type": "code", "execution_count": 3, "id": "8feea332", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 61/61 [01:23<00:00, 1.37s/it]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWind
02017-11-01 00:05:00-04:001815.03291.01594.05402.00.0290.0261.0
12017-11-01 00:10:00-04:001705.03185.01541.05401.00.0285.0259.0
22017-11-01 00:15:00-04:001683.03049.01498.05402.00.0286.0286.0
32017-11-01 00:20:00-04:001612.03022.01488.05402.00.0285.0313.0
42017-11-01 00:25:00-04:001561.02935.01488.05402.00.0287.0296.0
...........................
5430732022-11-30 23:40:00-05:002454.02434.03673.03342.00.0253.01651.0
5430742022-11-30 23:45:00-05:002447.02352.03628.03342.00.0252.01684.0
5430752022-11-30 23:50:00-05:002420.02309.03566.03342.00.0253.01715.0
5430762022-11-30 23:55:00-05:002342.02256.03538.03342.00.0252.01728.0
5430772022-12-01 00:00:00-05:002253.02283.03557.03342.00.0251.01673.0
\n", "

543078 rows × 8 columns

\n", "
" ], "text/plain": [ " Time Dual Fuel Hydro Natural Gas Nuclear \\\n", "0 2017-11-01 00:05:00-04:00 1815.0 3291.0 1594.0 5402.0 \n", "1 2017-11-01 00:10:00-04:00 1705.0 3185.0 1541.0 5401.0 \n", "2 2017-11-01 00:15:00-04:00 1683.0 3049.0 1498.0 5402.0 \n", "3 2017-11-01 00:20:00-04:00 1612.0 3022.0 1488.0 5402.0 \n", "4 2017-11-01 00:25:00-04:00 1561.0 2935.0 1488.0 5402.0 \n", "... ... ... ... ... ... \n", "543073 2022-11-30 23:40:00-05:00 2454.0 2434.0 3673.0 3342.0 \n", "543074 2022-11-30 23:45:00-05:00 2447.0 2352.0 3628.0 3342.0 \n", "543075 2022-11-30 23:50:00-05:00 2420.0 2309.0 3566.0 3342.0 \n", "543076 2022-11-30 23:55:00-05:00 2342.0 2256.0 3538.0 3342.0 \n", "543077 2022-12-01 00:00:00-05:00 2253.0 2283.0 3557.0 3342.0 \n", "\n", " Other Fossil Fuels Other Renewables Wind \n", "0 0.0 290.0 261.0 \n", "1 0.0 285.0 259.0 \n", "2 0.0 286.0 286.0 \n", "3 0.0 285.0 313.0 \n", "4 0.0 287.0 296.0 \n", "... ... ... ... \n", "543073 0.0 253.0 1651.0 \n", "543074 0.0 252.0 1684.0 \n", "543075 0.0 253.0 1715.0 \n", "543076 0.0 252.0 1728.0 \n", "543077 0.0 251.0 1673.0 \n", "\n", "[543078 rows x 8 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_fuel_mix(start=\"Nov 1, 2017\", end=\"Dec 1, 2022\")\n", "df" ] }, { "cell_type": "markdown", "id": "465aca60", "metadata": {}, "source": [ "The call above retried fuel mix data in 5 minute increments. Let's resample the data to monthly" ] }, { "cell_type": "code", "execution_count": 4, "id": "49363e9a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWind
02017-11-01 00:00:00-04:001.573968e+062.531928e+061.820341e+063.691667e+0634647.991342204631.604057446180.586391
12017-12-01 00:00:00-05:002.180086e+062.510918e+062.165724e+063.663322e+06115217.033671200007.652359398377.363705
22018-01-01 00:00:00-05:002.622223e+062.282970e+062.188042e+064.028542e+06296391.763349176729.788301507351.954197
32018-02-01 00:00:00-05:001.279852e+062.235497e+061.910894e+063.315114e+0623610.114286166662.434649443330.772107
42018-03-01 00:00:00-05:001.624682e+062.709626e+061.902294e+063.573660e+06123399.206231193060.572636344040.517233
52018-04-01 00:00:00-04:001.628499e+062.512376e+062.029388e+062.870185e+0624508.221605194875.623428374113.947364
62018-05-01 00:00:00-04:002.033018e+062.567769e+061.852400e+063.419482e+0628013.870976187603.310749295070.172210
72018-06-01 00:00:00-04:002.463700e+062.232738e+062.109071e+063.800927e+0616820.590832192735.332003214476.829655
82018-07-01 00:00:00-04:003.815281e+062.273509e+062.957611e+063.884576e+06159995.689560200652.408333205469.735165
92018-08-01 00:00:00-04:004.103557e+062.227516e+063.057461e+063.731969e+0698027.052796201173.598958204928.367176
\n", "
" ], "text/plain": [ " Time Dual Fuel Hydro Natural Gas \\\n", "0 2017-11-01 00:00:00-04:00 1.573968e+06 2.531928e+06 1.820341e+06 \n", "1 2017-12-01 00:00:00-05:00 2.180086e+06 2.510918e+06 2.165724e+06 \n", "2 2018-01-01 00:00:00-05:00 2.622223e+06 2.282970e+06 2.188042e+06 \n", "3 2018-02-01 00:00:00-05:00 1.279852e+06 2.235497e+06 1.910894e+06 \n", "4 2018-03-01 00:00:00-05:00 1.624682e+06 2.709626e+06 1.902294e+06 \n", "5 2018-04-01 00:00:00-04:00 1.628499e+06 2.512376e+06 2.029388e+06 \n", "6 2018-05-01 00:00:00-04:00 2.033018e+06 2.567769e+06 1.852400e+06 \n", "7 2018-06-01 00:00:00-04:00 2.463700e+06 2.232738e+06 2.109071e+06 \n", "8 2018-07-01 00:00:00-04:00 3.815281e+06 2.273509e+06 2.957611e+06 \n", "9 2018-08-01 00:00:00-04:00 4.103557e+06 2.227516e+06 3.057461e+06 \n", "\n", " Nuclear Other Fossil Fuels Other Renewables Wind \n", "0 3.691667e+06 34647.991342 204631.604057 446180.586391 \n", "1 3.663322e+06 115217.033671 200007.652359 398377.363705 \n", "2 4.028542e+06 296391.763349 176729.788301 507351.954197 \n", "3 3.315114e+06 23610.114286 166662.434649 443330.772107 \n", "4 3.573660e+06 123399.206231 193060.572636 344040.517233 \n", "5 2.870185e+06 24508.221605 194875.623428 374113.947364 \n", "6 3.419482e+06 28013.870976 187603.310749 295070.172210 \n", "7 3.800927e+06 16820.590832 192735.332003 214476.829655 \n", "8 3.884576e+06 159995.689560 200652.408333 205469.735165 \n", "9 3.731969e+06 98027.052796 201173.598958 204928.367176 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# resample to month start (MS) frequency\n", "fuel_mix_hourly = df.set_index(\"Time\").resample(\"H\").mean()\n", "data = fuel_mix_hourly.resample('MS').sum()[:-1].reset_index()\n", "data.head(10)" ] }, { "cell_type": "code", "execution_count": 5, "id": "7c53e1eb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Nuclear',\n", " 'Dual Fuel',\n", " 'Hydro',\n", " 'Natural Gas',\n", " 'Wind',\n", " 'Other Renewables',\n", " 'Other Fossil Fuels']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_sources = data.set_index(\"Time\").sum().sort_values(ascending=False).index.tolist()\n", "top_sources" ] }, { "cell_type": "code", "execution_count": 6, "id": "70533721", "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": "2018201920202021202202M4M6M8M10M12M14MvariableNuclearDual FuelHydroNatural GasWindOther RenewablesOther Fossil FuelsFuel Mix over Time in NYISODateMegawatts (MWh)" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.bar(data, x=\"Time\", y=top_sources, title=\"Fuel Mix over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Megawatts (MWh)\"\n", ")\n", "fig.show(\"svg\", width = 1200, height = 600)" ] }, { "cell_type": "markdown", "id": "45f72223", "metadata": {}, "source": [ "we can also look at percentages over time" ] }, { "cell_type": "code", "execution_count": 7, "id": "f2014df6", "metadata": {}, "outputs": [], "source": [ "percentages = data.set_index(\"Time\")\n", "\n", "percentages = percentages.div(percentages.sum(axis=1), axis=0).reset_index()" ] }, { "cell_type": "code", "execution_count": 8, "id": "20e75cbe", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": "2018201920202021202200.20.40.60.81variableNuclearDual FuelHydroNatural GasWindOther RenewablesOther Fossil FuelsFuel Mix over Time in NYISODatePercent" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.bar(percentages, x=\"Time\", y=top_sources, title=\"Fuel Mix over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Percent\"\n", ")\n", "fig.show(\"svg\", width = 1200, height = 600)" ] }, { "cell_type": "code", "execution_count": 9, "id": "4cc02f4b", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": "Jan 2018Jul 2018Jan 2019Jul 2019Jan 2020Jul 2020Jan 2021Jul 2021Jan 2022Jul 202201M2M3M4M5M6M7MvariableTotal Carbon FreeHydroNuclearWindOther RenewablesCarbon Free Supply over Time in NYISODateMegawatts (MWh)" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "carbon_free = [\"Hydro\", \"Nuclear\", \"Wind\", \"Other Renewables\"]\n", "data[\"Total Carbon Free\"] = data[carbon_free].sum(axis=1)\n", "fig = px.line(data, x=\"Time\", y=[\"Total Carbon Free\"] + carbon_free, title=\"Carbon Free Supply over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Megawatts (MWh)\"\n", ")\n", "fig.show(\"svg\", width = 1200, height = 600)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.2 64-bit ('gridstatus')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.2" }, "vscode": { "interpreter": { "hash": "49f14642123d0cc1afa9fa45716ed5f1e915189c28b01efe02a8b7ec3c0a3fce" } } }, "nbformat": 4, "nbformat_minor": 5 }